// JavaScript Document
/*DEFINICION DE FUNCIONES Y VARIABLES GLOBALES*/

	var misReglasHash = new Hashtable(); //hash de todas las reglas, accesible por ID de la regla
	var misFranjasHorarias = new Array(); //Array de todas las franjas horarias

	var reglasSeleccionadasId = new Array();

    var reqHandlerSaveRegla = null;
	var reglaModificar = null;

	var orderTypeReglas = "A";
	
	function addOptionsToCuentaReglasSelector(mostrarFlota){
		var misVehiculosList= misVehiculosHash.values();
		var cantMoviles 	= misVehiculosList.length;
		selector 			= document.getElementById('cuentaIdRegla');
		selector.options.length=0; //remove all options
		if(LOGIN.esFlota==1 && mostrarFlota){
			newOption		= document.createElement('option');
			newOption.value = "2|"+LOGIN.cuentaFk;
			newOption.text 	= "Toda la flota";
			try {
				selector.add(newOption, null); // para todos los browsers (STANDART)
			}catch(ex) {
			    selector.add(newOption); // para IE
			}
		}
		for (var i=0; i<misVehiculosList.length; i++){
			if (misVehiculosList[i]!='toJSONString'){
				newOption		= document.createElement('option');
				newOption.value = misVehiculosList[i].id;
				newOption.text 	= misVehiculosList[i].label;
				try {
					selector.add(newOption, null); // para todos los browsers (STANDART)
				}catch(ex) {
				    selector.add(newOption); // para IE
				}
			}
		}
	}

	function addOptionsToZonaSelector(){
		var misZonasList = misZonasHash.values();
		if (misZonasList.length>0){
		   selector = document.getElementById('newReglaZonas');
		   selector.options.length=0; //remove all options
		   for (var i=0; i<misZonasList.length; i++){
			 if (misZonasList[i]!='toJSONString'){
				 newOption = document.createElement('option');
				 newOption.value = misZonasList[i].id;
				 newOption.text = misZonasList[i].nombre;
				   try {
    					selector.add(newOption, null); // para todos los browsers (STANDART)
					   }
				  catch(ex) {
					    selector.add(newOption); // para IE
					   }
			 }
		   }
		}
	}
	function addOptionsToPuntosSelector(){
		var misPuntosList = misPuntosHash.values();
		if (misPuntosList.length>0){
		   selector = document.getElementById('newReglaPuntos');
		   selector.options.length=0; //remove all options
		   for (var i=0; i<misPuntosList.length; i++){
			 if (misPuntosList[i]!='toJSONString'){
				 newOption = document.createElement('option');
				 newOption.value = misPuntosList[i].id;
				 newOption.text = misPuntosList[i].nombre;
				   try {
    					selector.add(newOption, null); // para todos los browsers (STANDART)
					   }
				  catch(ex) {
					    selector.add(newOption); // para IE
					   }
			 }
		   }
		}
	}
	function addOptionsToRutasSelector(){
		var misRutasList = misRutasHash.values();
		if (misRutasList.length>0){
			selector = document.getElementById('newReglaRutas');
			selector.options.length=0; //remove all options
			for (var i=0; i<misRutasList.length; i++){
				if (misRutasList[i]!='toJSONString'){
					newOption = document.createElement('option');
					newOption.value = misRutasList[i].id;
					newOption.text = misRutasList[i].nombre;
					try {
						selector.add(newOption, null); // para todos los browsers (STANDART)
					}
					catch(ex) {
						selector.add(newOption); // para IE
					}
				}
			}
		}
	}

	function createPopUpRegla(e, idRegla, element,isMenu){

	   PopUpMenuMap = new PopupMenu();

   	   if (LOGIN.PERMISOS[9]){
		   PopUpMenuMap.add('Modificar', function(target) {
    		  modificarRegla(idRegla.toString());
		   });
		   PopUpMenuMap.add('Eliminar', function(target) {
	    	  eliminarReglas(idRegla.toString());
		   });
		   PopUpMenuMap.addSeparator();
		   if(!LOGIN.isBykom){
			   PopUpMenuMap.add('Asignar moviles', function(target) {
			      aplicarRegla(idRegla.toString());
			   });
			   PopUpMenuMap.addSeparator();
		   }
	   }
	   PopUpMenuMap.add('Mas informacion', function(target) {
	      	openInfoRegla(idRegla.toString());
	   });


	   PopUpMenuMap.setSize(140, 0);
	   PopUpMenuMap.bind(element); // target is this pre block
	   PopUpMenuMap.show(e,isMenu);
	   return false;
	   }

/********************* FUNCIONES PARA PANTALLA PRINCIPAL ***********************/
    var reqHandlerReglas = null;

	function checkedRegla(check){
		if (check.checked)
			reglasSeleccionadasId.push(check.value);
		else {
			pos=indexOfArray(reglasSeleccionadasId,check.value.toString());
			if (pos!=-1)
			    reglasSeleccionadasId.splice(pos,1);
			}
		}

	function ordenarReglas(){
		if (orderTypeReglas=="A"){
			orderTypeReglas="D";
			printTableReglas();
			$j("#orderBTNreglas").removeClass("z_a").addClass("a_z");
		}
		else{
			orderTypeReglas="A";
			printTableReglas();
			$j("#orderBTNreglas").removeClass("a_z").addClass("z_a");
		}
	}

	function printTableReglas(){
		tabla = '<table width="100%" border="0" cellpadding="5" cellspacing="0" >';
		var misReglasList = misReglasHash.values();
		var sortArray = new SortArray(misReglasList,"QUICKSORT");
		sortArray.ordenar(orderTypeReglas,'nombre');
		var tipoRegla = "";
		for (var i=0; i<misReglasList.length; i++) {
			if (misReglasList[i]!='toJSONString'){
				if(misReglasList[i].tipoRegla==1){
					tipoRegla = "(Punto)";
				}else if(misReglasList[i].tipoRegla==0){
					tipoRegla = "(Zona)";
				}else if(misReglasList[i].tipoRegla==2){
					tipoRegla = "(Ruta)";
				}
				checked = '';
				if (indexOfArray(reglasSeleccionadasId, misReglasList[i].id.toString())!=-1)
					checked='checked';
				var reglaId = misReglasList[i].id;
				tabla += '<tr oncontextmenu="return createPopUpRegla(event,'+reglaId+',this,true);">';
				tabla += '<td valign="middle" width="16">';
	       		tabla += " <input type='checkbox' name='boxRules[]' value='"+reglaId+"' "+checked+" onClick='checkedRegla(this);'>";
    	    	tabla += '</td>';
        		tabla += '<td valign="top">';
	        	tabla += ' <span class="inputLBL">'+misReglasList[i].nombre+" "+tipoRegla+'</span>';
    	    	tabla += '</td>';
				
				tabla += '<td align="right" valign="top">';
				if (misReglasList[i].MOVILES.length==0)
					tabla += '<img src="images/datoInvalido.gif" border="0"  title="Esta regla no esta aplicada a ningun movil." />';
					tabla += '<img src="images/infoItemImg.gif" width="16" height="16" border="0"  style="cursor:pointer;" title="Mas informacion" onClick="openInfoRegla('+reglaId+');"/>';
					tabla += '</td>';
					tabla += '</tr>';
				}
			}
		tabla += '</table>';
		document.getElementById('divListaReglas').innerHTML = tabla;
	}

	function refreshViewReglas(){
		if (!misReglasHash.isEmpty())
		 	printTableReglas();
		else
			document.getElementById('divListaReglas').innerHTML = '<span class="inputLBL">No se encontraron reglas registradas.</span>';
	}

	function OnReadyStateChangeReglas(){
		ready = reqHandlerReglas.readyState;
		if(ready == READY_STATE_LOADING || ready == READY_STATE_LOADED){
			$j('#divListaReglas').html("<img src='images/loader_accordeon.gif' alt='Cargando...' />");
		}else if (ready == READY_STATE_COMPLETE) {
			reglasJSON =  jQuery.parseJSON(reqHandlerReglas.responseText);
			if (reglasJSON.length != 'undefined') {
				for (i=0; i<reglasJSON.length; i++){
					switch(parseInt(reglasJSON[i].tipoRegla)){
					case 0://zona
						if (LOGIN.PERMISOS[5]){//permiso para ver zonas
							misReglasHash.put(reglasJSON[i].id.toString(),reglasJSON[i]);
						}
						break;
					case 1://punto
						if (LOGIN.PERMISOS[4]){//permiso para ver puntos
							misReglasHash.put(reglasJSON[i].id.toString(),reglasJSON[i]);
						}
						break;
					case 2://ruta
						if (LOGIN.PERMISOS[20]){//permiso para ver rutas
							misReglasHash.put(reglasJSON[i].id.toString(),reglasJSON[i]);
						}
						break;
					}
				}
				refreshViewReglas();
			}
		$j("#iconoMapa").removeClass().addClass("icono_mapa");
		autoRefreshFlag = 0;
		}
	}

	function CargarReglas() {
    	reqParamsReglas = "COMMAND=REGLAS";
    	reqParamsReglas += "&CUENTA=" + LOGIN.cuentaFk;
		reqParamsReglas += "&OBJETIVODB=" + LOGIN.objetivoDB;
		reqParamsReglas += "&TABLAID=" + LOGIN.tablaId;
		reqParamsReglas += "&OBJETIVO=" + LOGIN.objetivo;
		reqParamsReglas += "&ISBYKOM=" + LOGIN.isBykom;
    	$j("#iconoMapa").removeClass().addClass("icono_mapa_activo");
    	if (msie)
            reqHandlerReglas = new ActiveXObject("Microsoft.XMLHTTP");
        else
            reqHandlerReglas = new XMLHttpRequest();
        reqHandlerReglas.onreadystatechange = OnReadyStateChangeReglas;
        reqHandlerReglas.open("POST", "querycontroller.php", true);
        reqHandlerReglas.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
		reqHandlerReglas.send(reqParamsReglas);
    }

	var reqHandlerDeleteReglas = null;
	var deleteReglaId = null;

	function OnReadyStateChangeDeleteReglas(){
		ready = reqHandlerDeleteReglas.readyState;
		if (ready == READY_STATE_COMPLETE) {
			deleteResponse = jQuery.parseJSON(reqHandlerDeleteReglas.responseText);
			if (deleteResponse){
				 if (deleteReglaId==null){ //se ejecuto desde MINIMENU
				 	//ahora remuevo las reglas que ya fueron eliminadas de sus respectivos arrays
				 	for (var i=0; i<reglasSeleccionadasId.length; i++)
					 	misReglasHash.remove(reglasSeleccionadasId[i].toString());
					reglasSeleccionadasId = new Array();
				 }else{
					pos=indexOfArray(reglasSeleccionadasId,deleteReglaId.toString());
				    if (pos!=-1)
						reglasSeleccionadasId.splice(pos,1);
					misReglasHash.remove(deleteReglaId.toString());
					deleteReglaId = null;
				 }
				 refreshViewReglas();
			}else {
				alert ("Error en consulta a DB: No se pudieron eliminar las reglas seleccionados");
			}
			$j("#iconoMapa").removeClass().addClass("icono_mapa");
			autoRefreshFlag = 0;
		}
	}

	function eliminarReglas(idRegla) {
		 deleteReglaId = null;
		 if((reglasSeleccionadasId.length>0)||(idRegla!=null)){
			conf = confirm('Esta a punto de eliminar la/las reglas seleccionadas. �Desea continuar de todas formas?');
			if(conf){
		    	reqParamsDeleteReglas = "COMMAND=DELETE";
				if (idRegla!=null){
					reqParamsDeleteReglas += "&ORDERID="+idRegla.toString();
					deleteReglaId = idRegla.toString();
				}else{
					reqParamsDeleteReglas += "&ORDERID="+reglasSeleccionadasId.join(",");
				}
				reqParamsDeleteReglas += "&ISBYKOM="+LOGIN.isBykom;
				
    			autoRefreshFlag = 1;
	    		$j("#iconoMapa").removeClass().addClass("icono_mapa_activo");
	    		if (msie)
    	    	    reqHandlerDeleteReglas = new ActiveXObject("Microsoft.XMLHTTP");
	    	    else
    	    	    reqHandlerDeleteReglas = new XMLHttpRequest();
	        	reqHandlerDeleteReglas.onreadystatechange = OnReadyStateChangeDeleteReglas;
		        reqHandlerDeleteReglas.open("POST", "persistirregla.php", true);
    		    reqHandlerDeleteReglas.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
				reqHandlerDeleteReglas.send(reqParamsDeleteReglas);
			}
		 }else{
			 alert ('Debe seleccionar por lo menos una regla para poder realizar esta operacion.');
		 }
    }
	/*************************FUNCIONES PARA PANTALLA NUEVA REGLA************************/
	function cleanFormNuevaRegla(){
		hideDiv('newReglaErrorDisplay');
		$j("#franjaZonaPunto").show();
		$j("#franjaRuta").hide();
		$j("#botonesZonaPunto").show();
		$j("#botonesRuta").hide();
		$j("#botonNuevaFranja").show();
		$j("#botonNuevaFranjaEspecifica").hide();
		if(LOGIN.isBykom){
			var mostrarFlota = false;
			if($j("#tipoRegla").val()==0){
				mostrarFlota = true;
			}
			addOptionsToCuentaReglasSelector(mostrarFlota);
		}
		if(LOGIN.PERMISOS[5]){
			addOptionsToZonaSelector();
			document.getElementById('newReglaEstado').value=0;
		}
		if(LOGIN.PERMISOS[4]){
			addOptionsToPuntosSelector();
		}
		if(LOGIN.PERMISOS[20]){
			initCalendarioConfigFranjaRuta();
			addOptionsToRutasSelector();
		}
		if(!LOGIN.PERMISOS[5] && !LOGIN.PERMISOS[4] ){
			$j("#franjaZonaPunto").hide();
			$j("#botonesZonaPunto").hide();
			$j("#botonNuevaFranja").hide();
			if(LOGIN.PERMISOS[20]){
				$j("#botonesRuta").show();
				$j("#franjaRuta").show();
				$j("#botonNuevaFranjaEspecifica").show();
			}
		}
		document.getElementById('listFranjaHoraria').innerHTML = "";
		if($j("#tipoRegla").val()!=2){
			nuevaFranjaHoraria();
		}else{
			nuevaFranjaEspecifica();
		}
		misFranjasHorarias	=	new Array();
		document.getElementById('reglaIdHID').value="";
		document.getElementById('nombreRegla').value="";
	}

	function cleanFormModificarRegla(){
		$j("#tipoRegla").val(reglaModificar.tipoRegla);
		cleanFormNuevaRegla();
		hideDiv('newFranjaHoraria');
		document.getElementById("newZonaErrorDisplay").innerHTML = "";
		var reglaId = "";
		if(LOGIN.isBykom){
			reglaId = reglaModificar.id.toString().substring(0,reglaModificar.id.toString().length-1);
		}else{
			reglaId = reglaModificar.id.toString();
		}
		document.getElementById('reglaIdHID').value = reglaId;
		document.getElementById('nombreRegla').value = reglaModificar.nombre;
		if(reglaModificar.tipoRegla==0){//de zona
			document.getElementById('newReglaEstado').value = reglaModificar.debeEstar;
			document.getElementById('newReglaZonas').value = reglaModificar.zona;
			$j("#camposPunto").hide();
			$j("#camposRuta").hide();
			$j("#camposZona").show();
		}else if(reglaModificar.tipoRegla==1){//de punto
			$j("#camposRuta").hide();
			$j("#camposPunto").show();
			$j("#camposZona").hide();
			$j("#newReglaPuntos").val(reglaModificar.zona);
			$j("#tolerancia").val(reglaModificar.tolerancia);
		}else if(reglaModificar.tipoRegla==2){//de ruta
			$j("#camposPunto").hide();
			$j("#camposZona").hide();
			$j("#camposRuta").show();
			$j("#newReglaRutas").val(reglaModificar.zona);
			$j("#toleranciaRuta").val(reglaModificar.tolerancia);
			$j("#franjaZonaPunto").hide();
			$j("#franjaRuta").show();
			$j("#botonNuevaFranja").hide();
			$j("#botonNuevaFranjaEspecifica").show();
		}
		if(LOGIN.isBykom){
			var cuentaId = "";
			if(reglaModificar.tipoCuenta==2){//es flota
				cuentaId = "2|"+reglaModificar.MOVILES[0];
			}else{//es movil
				cuentaId = reglaModificar.MOVILES[0];
			}
			$j("#cuentaIdRegla").val(cuentaId);
			
		}
		$j("#tipoReglaTR").hide();
		for(i=0; i<reglaModificar.FRANJAS.length; i++){
			misFranjasHorarias[i]=reglaModificar.FRANJAS[i];
		}
		for(var i=0; i<misFranjasHorarias.length; i++){
			if(reglaModificar.tipoRegla==2){
				printFranjaEspecifica(parseInt(i));
			}else{
				printFranjaHoraria(parseInt(i));
			}
		}
	}

	function nuevaRegla(){
		//mostrar panel de nueva regla
		$j("#tipoReglaTR").show();
		
		if(LOGIN.PERMISOS[4]){
			$j("#camposPunto").hide();
		}
		if(LOGIN.PERMISOS[5]){
			$j("#camposZona").hide();
		}
		if(LOGIN.PERMISOS[20]){
			$j("#camposRuta").hide();
		}
		if(LOGIN.PERMISOS[5]){//zona
			$j('#tipoRegla').val(0);
			$j("#camposZona").show();
		}else if(LOGIN.PERMISOS[4]){//punto
			$j('#tipoRegla').val(1);
			$j("#camposPunto").show();
		}else if(LOGIN.PERMISOS[20]){//ruta
			$j('#tipoRegla').val(2);
			$j("#camposRuta").show();
		}
		cleanFormNuevaRegla();
		document.getElementById('newReglaTitle').innerHTML = "Nueva Regla";
		hideDiv('div_reglasPpal');
		showDiv('div_nuevaRegla');
		if(LOGIN.isBykom){
			hideDiv('botonNuevaFranja');
		}
	}

	function cleanEstadoNuevaRegla(){ //limpia el estado "NUEVA REGLA"
		hideDiv('div_nuevaRegla');
		showDiv('div_reglasPpal');
	}

	function nuevaFranjaEspecifica() {
		$j("#franjaZonaPunto").hide();
		$j("#franjaRuta").show();
		$j("#botonesZonaPunto").hide();
		$j("#botonesRuta").show();
		//mostrar panel de nueva franja horaria
		document.getElementById('fechaConfigRuta').value="";
		document.getElementById('fechaConfigRutaFIN').value="";
		document.getElementById('newReglaHoraDde').value="";
		document.getElementById('newReglaHoraHta').value="";
		showDiv('newFranjaHoraria');
		if(LOGIN.isBykom){
			$j("#botonNuevaFranjaEspecifica").hide();
			$j("#botonNuevaFranja").hide();
		}
	}
	function nuevaFranjaHoraria() {
		$j("#franjaZonaPunto").show();
		$j("#franjaRuta").hide();
		$j("#botonesZonaPunto").show();
		$j("#botonesRuta").hide();
		//mostrar panel de nueva franja horaria
		checkDays = document.getElementsByName('newReglaDias[]');
		for (i=0; i<checkDays.length; i++)
			checkDays[i].checked=false;
		document.getElementById('newReglaHoraDde').value="";
		document.getElementById('newReglaHoraHta').value="";
		showDiv('newFranjaHoraria');
		if(LOGIN.isBykom){
			$j("#botonNuevaFranja").hide();
			$j("#botonNuevaFranjaEspecifica").hide();
		}
	}

	function validarFranjaHoraria(){
		hideDiv('newReglaErrorDisplay');
		document.getElementById("newReglaErrorDisplay").innerHTML="";
		var errorMsg = '';
		//Validar que al menos 1 dia este seleccionado
		var checkDays = document.getElementsByName('newReglaDias[]');
		var notDaysChecked = true;
		for (var i=0; i<checkDays.length; i++){
			if (checkDays[i].checked){
				notDaysChecked = false;
				i = checkDays.length;
			}
		}
		if (notDaysChecked)
			errorMsg += 'Debe seleccionar por lo menos un dia de la semana.<br>';
		//Validar "Hora Dde"
		var HoraDde = trim(document.getElementById('newReglaHoraDde').value);
		if (HoraDde=='')
			errorMsg += 'El campo "HORA DDE" es obligatorio.<br>';
		else if (!_validTime24_HHMMss(HoraDde))
				errorMsg += 'El campo "HORA DDE" no presenta un formato valido (hh:mm:ss en 24hs, con seg. opcional).<br>';
			 else //OK, TRIMEO este campo...
			 	document.getElementById('newReglaHoraDde').value = HoraDde;
		//Validar "Hora Hta"
		var HoraHta = trim(document.getElementById('newReglaHoraHta').value);
		if (HoraHta=='')
			errorMsg += 'El campo "HORA HTA" es obligatorio.<br>';
		else if (!_validTime24_HHMMss(HoraHta))
				errorMsg += 'El campo "HORA HTA" no presenta un formato valido (hh:mm:ss en 24hs, con seg. opcional).<br>';
			 else //OK, TRIMEO este campo...
			 	document.getElementById('newReglaHoraHta').value = HoraHta;
		if (errorMsg == '')
			return true;
		document.getElementById("newReglaErrorDisplay").innerHTML = errorMsg;
		showDiv("newReglaErrorDisplay");
		return false;
	}

	function darDiaPorNumero(numero){
		switch(numero){
			case 0: return "Dom"; break;
			case 1: return "Lun"; break;
			case 2: return "Mar"; break;
			case 3: return "Mie"; break;
			case 4: return "Jue"; break;
			case 5: return "Vie"; break;
			case 6: return "Sab"; break;
			default: return "none"; break;
		}
	}

	function borrarFranjaHoraria(pos,ruta){
		hideDiv('franjaHoraria'+pos.toString());
		$j('#franjaHoraria'+pos.toString()).remove();
		misFranjasHorarias[pos]=null;
		misFranjasHorarias.splice(pos,1);
		if(ruta!=undefined && ruta!=null && ruta!=""){
			$j("#botonNuevaFranjaEspecifica").show();	
		}else{
			if(LOGIN.isBykom){
				$j("#botonNuevaFranja").show();
			}
		}
	}

	function printFranjaHoraria(pos){
		//Seteo de dias:
		franja = misFranjasHorarias[pos];
		texto="";
		for (i=0; i<7; i++){
			if ((franja[i]==true)||(trim(franja[i].toString())=='true'))
				texto += darDiaPorNumero(i) + ",";
		}
		texto+= " de " + franja[7] + " a " + franja[8] + "hs.";
		htmlDiv="<div id='franjaHoraria"+pos+"'>";
		htmlDiv+="<table width='245'><tr>";
		htmlDiv+="<td><span class='inputLBL'>"+texto+"</span></td>";
		htmlDiv+="<td align='right'><img src='images/deleteItemImg.gif' border='0' style='cursor:pointer;' onclick='borrarFranjaHoraria("+pos+")' title='Eliminar franja horaria'/></td>";
		htmlDiv+="</tr></table>";
		htmlDiv+="</div>";
		document.getElementById("listFranjaHoraria").innerHTML+=htmlDiv;
	}

	function cargarFranjaHoraria() {
		if (validarFranjaHoraria()){
			hideDiv('newFranjaHoraria');
			franja = new Array();
			checkDays = document.getElementsByName('newReglaDias[]');
			for (i=0; i<checkDays.length; i++)
				franja.push(checkDays[i].checked);
			franja.push(document.getElementById('newReglaHoraDde').value);
			franja.push(document.getElementById('newReglaHoraHta').value);
			misFranjasHorarias.push(franja);
			printFranjaHoraria(misFranjasHorarias.length-1);
		}
	}
	function printFranjaEspecifica(pos){
		//Seteo de dias:
		franja = misFranjasHorarias[pos];
		if(franja!=null){
			$j("#botonNuevaFranjaEspecifica").hide();
		}
		texto="";
		texto+= " de " + franja[0] + " a " + franja[1] + ".";
		htmlDiv="<div id='franjaHoraria"+pos+"'>";
		htmlDiv+="<table width='245'><tr>";
		htmlDiv+="<td><span class='inputLBL'>"+texto+"</span></td>";
		htmlDiv+="<td align='right'><img src='images/deleteItemImg.gif' border='0' style='cursor:pointer;' onclick='borrarFranjaHoraria("+pos+",true);' title='Eliminar franja horaria'/></td>";
		htmlDiv+="</tr></table>";
		htmlDiv+="</div>";
		document.getElementById("listFranjaHoraria").innerHTML+=htmlDiv;
	}
	function validarFranjaEspecifica(){
		hideDiv('newReglaErrorDisplay');
		document.getElementById("newReglaErrorDisplay").innerHTML="";
		var errorMsg = '';
		
		if($j("#fechaConfigRuta").val()==""){
			errorMsg += 'El campo "Fecha DDE" es obligatorio.<br>';
		}
		if($j("#fechaConfigRutaFIN").val()==""){
			errorMsg += 'El campo "Fecha HTA" es obligatorio.<br>';
		}
		
		if (errorMsg == '')
			return true;
		document.getElementById("newReglaErrorDisplay").innerHTML = errorMsg;
		showDiv("newReglaErrorDisplay");
		return false;
	}
	function cargarFranjaEspecifica() {
		if(misFranjasHorarias.length>1){
			document.getElementById("newReglaErrorDisplay").innerHTML = "Solo puede cargar una franja horaria a la logistica de rutas";
			showDiv("newReglaErrorDisplay");
			return false;
		}
		if (validarFranjaEspecifica()){
			if(!esFechaValida($j("#fechaConfigRuta"),true,$j("#errorFechaInicioRutas"))){
		  		return false;
		  	}
		  	if(!esFechaValida($j("#fechaConfigRutaFIN"),true,$j("#errorFechaFinRutas"))){
		  		return false;
			}
			
			hideDiv('newFranjaHoraria');
			franja = new Array();
			var fechaDDE = $j("#fechaConfigRuta").val(); 
			var fechaHTA = $j("#fechaConfigRutaFIN").val(); 
			franja.push(fechaDDE);
			franja.push(fechaHTA);
			for (i=2; i<9; i++)
				franja.push(false);
			//franja.push(document.getElementById('newReglaHoraDde').value);
			//franja.push(document.getElementById('newReglaHoraHta').value);
			misFranjasHorarias.push(franja);
			printFranjaEspecifica(misFranjasHorarias.length-1);
			$j("#botonNuevaFranjaEspecifica").hide();	
			
		}
	}

	function cancelarFranjaHoraria(){
		hideDiv('newFranjaHoraria');
		if(LOGIN.isBykom){
			$j("#botonNuevaFranja").show();
		}
	}

	function semanaFranjaHoraria(){
		var checkDays = document.getElementsByName('newReglaDias[]');
		for (var i=0; i<checkDays.length; i++)
			checkDays[i].checked = true;
	}

	function validarNuevaRegla(){
		hideDiv('newReglaErrorDisplay');
		document.getElementById("newReglaErrorDisplay").innerHTML="";
		var errorMsg = '';
		var tipoRegla = $j("#tipoRegla").val();
		switch(parseInt(tipoRegla)){
			case 0:
				if(misZonasHash.size()==0){
					errorMsg += 'No puede crear una regla sin una zona relacionada.<br/>';
				}
				break;
			case 1:
				if(misPuntosHash.size()==0){
					errorMsg += 'No puede crear una regla sin un punto relacionado.<br/>';
				}
				//valido tolerancia
				var tolerancia = $j("#tolerancia").val();
				if(tolerancia==""){
					errorMsg += 'El campo "TOLERANCIA" es obligatorio.<br/>';
				}
				if(tolerancia<PTO_SEGURO_TOLERANCIA_MIN){
					errorMsg += 'El campo "TOLERANCIA" debe ser mayor a '+PTO_SEGURO_TOLERANCIA_MIN+'.<br/>';
				}
				break;
			case 2:
				if(misRutasHash.size()==0){
					errorMsg += 'No puede crear una regla sin una ruta relacionada.<br/>';
				}
				
				if($j("#toleranciaRuta").val()==""){
					errorMsg += 'El campo "TOLERANCIA" es obligatorio.<br>';
				}
				break;
		}
		if (LOGIN.isBykom) {
			var cuentaId = document.getElementById('cuentaIdRegla').value;
			if(cuentaId == 0){
				errorMsg += 'El campo "CUENTA" es obligatorio.<br/>';
			}
		}
		
		//Validar "Nombre"
		var nombre = trim(document.getElementById('nombreRegla').value);
		if (nombre=='')
			errorMsg += 'El campo "NOMBRE" es obligatorio.<br/>';
		else if (!_validString(nombre))
				errorMsg += 'El campo "NOMBRE" presenta caracteres invalidos.<br/>';
			 else //OK, TRIMEO este campo...
			 	document.getElementById('nombreRegla').value = nombre;
		//Valido que al menos haya cargado una franja horaria
		if (misFranjasHorarias.length==0)
			errorMsg += 'Para crear una regla debe cargarle por lo menos una franja horaria.<br/>';
		
		if (errorMsg == '')
			return true;
		document.getElementById("newReglaErrorDisplay").innerHTML = errorMsg;
		showDiv("newReglaErrorDisplay");
		return false;
	}

	function OnReadyStateChangeSaveRegla(){
		ready = reqHandlerSaveRegla.readyState;
		if (ready == READY_STATE_COMPLETE) {
			nuevaReglaJSON = jQuery.parseJSON(reqHandlerSaveRegla.responseText);
			if (nuevaReglaJSON.id != -1) {
				var reglaId = nuevaReglaJSON.id.toString();
				/*if(LOGIN.isBykom){
					reglaId += nuevaReglaJSON.tipoRegla;
				}*/
				var oldRule = misReglasHash.get(reglaId);
				if(!LOGIN.isBykom){
					if (oldRule!=null)
						nuevaReglaJSON.MOVILES = oldRule.MOVILES;
				}
				misReglasHash.put(reglaId,nuevaReglaJSON);
				alert('Grabacion realizada con exito!');
				refreshViewReglas();
				cleanEstadoNuevaRegla();
			}else{
				document.getElementById('newReglaErrorDisplay').innerHTML = 'Ocurrio un error en la DB al tratar de guardar la regla.'
				showDiv('newReglaErrorDisplay');
			}
			$j("#iconoMapa").removeClass().addClass("icono_mapa");
			autoRefreshFlag = 0;
		}
	}

	function guardarRegla() {
		if (validarNuevaRegla()){
			var tipoRegla = $j("#tipoRegla").val();
			franjas="";
			//if(tipoRegla==0 || tipoRegla==1){	
			for(i=0; i<misFranjasHorarias.length; i++){
				if (misFranjasHorarias[i]!=null){
					for(j=0; j<misFranjasHorarias[i].length; j++)
						franjas+=misFranjasHorarias[i][j]+",";
				}
				franjas=franjas.slice(0,franjas.length-1); //borro la ultima ','
				franjas+=";";
			}
			if (franjas.length>0)
				franjas=franjas.slice(0,franjas.length-1); //borro la ultima ';'
			//}
			var tolerancia = "";
			var debeEstar = "";
			if(tipoRegla==0){
				identificador = $j("#newReglaZonas").val();
				debeEstar	  = document.getElementById('newReglaEstado').value;
			}else if(tipoRegla==1){
				identificador = $j("#newReglaPuntos").val();
				debeEstar = 1;
				tolerancia = $j("#tolerancia").val();
			}else if(tipoRegla==2){
				identificador = $j("#newReglaRutas").val();
				debeEstar = 1;
				tolerancia = $j("#toleranciaRuta").val();
			}
			if (LOGIN.isBykom) {
				var cuentaId= document.getElementById('cuentaIdRegla').value;
				var vId 	= cuentaId.split("|");
				var tipoCuenta = 1;  
				if(vId.length==2){
					tipoCuenta = vId[0];  
					cuentaId = vId[1];  
				}
			}
	    	reqParamsRegla = "COMMAND=SAVE";
    		reqParamsRegla += "&ORDERID="+document.getElementById('reglaIdHID').value;
			reqParamsRegla += "&NOMBRE="+document.getElementById('nombreRegla').value;
			reqParamsRegla += "&DEBEESTAR="+debeEstar;
			reqParamsRegla += "&IDENTIFICADOR="+identificador;
			reqParamsRegla += "&TIPOREGLA="+tipoRegla;
			reqParamsRegla += "&TOLERANCIA="+tolerancia;
	    	reqParamsRegla += "&FRANJAS="+franjas;
    		reqParamsRegla += "&CUENTAID="+LOGIN.cuentaFk;
			reqParamsRegla += "&OBJETIVODB="+LOGIN.objetivoDB;
			reqParamsRegla += "&OBJETIVO="+LOGIN.objetivo;
			reqParamsRegla += "&TABLAID="+LOGIN.tablaId;
			reqParamsRegla += "&ISBYKOM="+LOGIN.isBykom;
			if(LOGIN.isBykom){
				reqParamsRegla += "&MOVILID="+cuentaId;
				reqParamsRegla += "&TIPOCUENTA="+tipoCuenta;
			}
    		autoRefreshFlag = 1;
	    	$j("#iconoMapa").removeClass().addClass("icono_mapa_activo");
    		if (msie)
        	    reqHandlerSaveRegla = new ActiveXObject("Microsoft.XMLHTTP");
	        else
    	        reqHandlerSaveRegla = new XMLHttpRequest();
			reqHandlerSaveRegla.onreadystatechange = OnReadyStateChangeSaveRegla;
	        reqHandlerSaveRegla.open("POST", "persistirregla.php", true);
    	    reqHandlerSaveRegla.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
			reqHandlerSaveRegla.send(reqParamsRegla);
		}
    }

	function modificarRegla(idRegla){
			reglaModificar = misReglasHash.get(idRegla.toString());
			//mostrar panel de nueva regla
			document.getElementById('newReglaTitle').innerHTML = "Modificar Regla";
			hideDiv('div_reglasPpal');
			showDiv('div_nuevaRegla');
			cleanFormModificarRegla();
	}

/*************************FUNCIONES PARA PANTALLA APLICAR REGLA************************/
	var aplicarReglaMovilesId = new Array(); //Id de moviles a los que se aplicara una regla
	var reglaAsignar = null;
	var reqHandlerAplicarRegla = null;

	function checkedListaMovilesReglas(check, ruta){
		if(ruta!=undefined && ruta!=null && ruta!=""){
			aplicarReglaMovilesId =  new Array();
			if (check.checked){
				aplicarReglaMovilesId.push(check.value);
			}
		}else{
			if (check.checked)
				aplicarReglaMovilesId.push(check.value);
			else {
				pos=indexOfArray(aplicarReglaMovilesId,check.value.toString());
				if (pos!=-1)
				    aplicarReglaMovilesId.splice(pos,1);
				}
		}
	}

	function printTableAplicarRegla(){
		var tabla = '<table width="260">';
		var misVehiculosList = misVehiculosHash.values();
		for (var i=0; i<misVehiculosList.length; i++){
			tabla += '<tr>';
			tabla += '<td width="19">';
			tabla += '<input type="checkbox" name="boxListaMovilesReglas[]" value="'+misVehiculosList[i].id+'" onClick="checkedListaMovilesReglas(this);" >';
			tabla += '</td>';
			tabla += '<td><span class="inputLBL">'+misVehiculosList[i].label+'</span></td>';
			tabla += '</tr>';
		}
		tabla += '</table>';
		document.getElementById('divListaMovilesReglas').innerHTML = tabla;
	}
	function printTableAplicarReglaRuta(){
		var tabla = '<table width="260">';
		var misVehiculosList = misVehiculosHash.values();
		for (var i=0; i<misVehiculosList.length; i++){
			tabla += '<tr>';
			tabla += '<td width="19">';
			tabla += '<input type="radio" name="boxListaMovilesReglas" value="'+misVehiculosList[i].id+'" onClick="checkedListaMovilesReglas(this,true);" >';
			tabla += '</td>';
			tabla += '<td><span class="inputLBL">'+misVehiculosList[i].label+'</span></td>';
			tabla += '</tr>';
		}
		tabla += '</table>';
		document.getElementById('divListaMovilesReglas').innerHTML = tabla;
	}

	function cleanEstadoAplicarRegla(){
		hideDiv('div_aplicarRegla');
		showDiv('div_reglasPpal');
	}

	function cleanFormAplicarRegla(){
		fields = document.getElementsByName('boxListaMovilesReglas[]');
		for (i = 0; i < fields.length; i++) {
			fields[i].checked = false;
	    	pos = indexOfArray(reglaAsignar.MOVILES,fields[i].value.toString());
			if (pos!=-1){
				fields[i].checked = true;
				aplicarReglaMovilesId.push(fields[i].value);
			}
		}
	}
	function cleanFormAplicarReglaRuta(){
		fields = document.getElementsByName('boxListaMovilesReglas');
		for (i = 0; i < fields.length; i++) {
			fields[i].checked = false;
			pos = indexOfArray(reglaAsignar.MOVILES,fields[i].value.toString());
			if (pos!=-1){
				fields[i].checked = true;
				aplicarReglaMovilesId.push(fields[i].value);
				break;
			}
		}
	}

	function aplicarRegla(idRegla){
		aplicarReglaMovilesId = new Array();
		reglaAsignar = misReglasHash.get(idRegla.toString());
		if(reglaAsignar.tipoRegla == 2){
			printTableAplicarReglaRuta();
			cleanFormAplicarReglaRuta();
		}else{
			printTableAplicarRegla();
			cleanFormAplicarRegla();
		}
		hideDiv('div_reglasPpal');
		hideDiv('aplicarReglaErrorDisplay');
		document.getElementById('spanNombreRegla').innerHTML=reglaAsignar.nombre;
		document.getElementById('aplicarReglaTitle').innerHTML="Aplicar regla a moviles";
		showDiv('div_aplicarRegla');
	}

	function validarAplicarRegla(){
		hideDiv('aplicarReglaErrorDisplay');
		return(true);
	}

	function OnReadyStateChangeAplicarRegla(){
		ready = reqHandlerAplicarRegla.readyState;
		if (ready == READY_STATE_COMPLETE) {
			aplicarReglaJSON = jQuery.parseJSON(reqHandlerAplicarRegla.responseText);
			if (aplicarReglaJSON.id != -1) {
				misReglasHash.get(reglaAsignar.id.toString()).MOVILES=aplicarReglaJSON;
				alert('Grabacion realizada con exito!');
				refreshViewReglas();
				cleanEstadoAplicarRegla();
			}
			else{
				document.getElementById('aplicarReglaErrorDisplay').innerHTML = 'Ocurrio un error en la DB al tratar de guardar la regla.'
				showDiv('aplicarReglaErrorDisplay');
			}
			$j("#iconoMapa").removeClass().addClass("icono_mapa");
			autoRefreshFlag = 0;
		}
	}

	function guardarAplicarRegla() {
		if (validarAplicarRegla()){
	    	reqParamsAplicarRegla = "COMMAND=APLICARREGLA";
    		reqParamsAplicarRegla += "&ORDERID="+reglaAsignar.id;
			reqParamsAplicarRegla += "&MOVILES="+aplicarReglaMovilesId.toString();
    		autoRefreshFlag = 1;
	    	$j("#iconoMapa").removeClass().addClass("icono_mapa_activo");
    		if (msie)
        	    reqHandlerAplicarRegla = new ActiveXObject("Microsoft.XMLHTTP");
	        else
    	        reqHandlerAplicarRegla = new XMLHttpRequest();
			reqHandlerAplicarRegla.onreadystatechange = OnReadyStateChangeAplicarRegla;
	        reqHandlerAplicarRegla.open("POST", "persistirregla.php", true);
    	    reqHandlerAplicarRegla.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
			reqHandlerAplicarRegla.send(reqParamsAplicarRegla);
		}
    }

/***************CREACION Y MANIPULACION DE ELEMENTOS DHTML WINDOW PARA REGLAS ***************************/

	function printTableInfoRegla(regla){
		var label = "";
		var imagen = "";
		if(regla.tipoRegla==0){
			label = "Zona";
			identificador = misZonasHash.get(regla.zona.toString());
			imagen = '<img src="images/zonaVisible.gif" border="0" onclick="cMapController.getMapActive().highlightZonaMarker('+regla.zona+');" style="cursor:pointer;" title="Localizar y centrar mapa en esta zona"/>';
		}else if(regla.tipoRegla==1){
			label = "Punto";
			identificador = misPuntosHash.get(regla.zona.toString());
			imagen = '<img src="images/zonaVisible.gif" border="0" onclick="cMapController.getMapActive().mostrarPunto('+regla.zona+');createHighlightFromIdPoint('+regla.zona+');cMapController.getMapActive().centrar(misPuntosHash.get(\''+regla.zona+'\').latitud,misPuntosHash.get(\''+regla.zona+'\').longitud);" style="cursor:pointer;" title="Localizar y centrar mapa en este punto"/>';
		}else if(regla.tipoRegla==2){
			label = "Ruta";
			identificador = misRutasHash.get(regla.zona.toString());
			imagen = '<img src="images/zonaVisible.gif" border="0" onclick="cMapController.getMapActive().highlightRutaMarker('+regla.zona+');" style="cursor:pointer;" title="Localizar y centrar mapa en esta ruta"/>';
		}
		if ((identificador==null)||(identificador=='undefined'))
			identificador = "desconocida";
		else
			identificador = identificador.nombre;
		table = '<table widht="340" cellspacing="0" cellpadding="0">';
		table += '<tr>';
		table += '<td widht="80" valign="middle"><span class="inputLBL">'+label+': </span></td>';
		table += '<td><span class="inputLBL">'+identificador+'</span></td>';
		table += '<td align="right">';
		if (regla.MOVILES.length==0)
			table += '<img src="images/datoInvalido.gif" border="0"  title="Esta regla no esta aplicada a ningun movil." />';
		table +=  imagen;
		table += '</td>';
		table += '</tr>';
		table += '<tr>';
		table += '<td><span class="inputLBL">Evento: </span></td>';
		table += '<td colspan="2"><span class="inputLBL">'+regla.debeEstar+'</span></td>';
		table += '</tr>';
		table += '<tr>';
		table += '<td colspan="3"><span class="resaltado">Franjas horarias</span></td>';
		table += '</tr>';
		table += '<tr>';
		table += '<td colspan="3">';
		table += '<ul>';
		for (var i=0; i<regla.FRANJAS.length; i++){
			franja = regla.FRANJAS[i];
			texto="";
			if(regla.tipoRegla==2){
				texto+= "de " + franja[0] + " a " + franja[1] + ".";
			}else{
				for (var j=0; j<7; j++){
					if ((franja[j]==true)||(trim(franja[j].toString())=='true'))
						texto += darDiaPorNumero(j) + ",";
				}
				texto+= " de " + franja[7] + " a " + franja[8] + "hs.";
			}
			table += '<li><span class="inputLBL">'+texto+'</span></li>';
		}
		table += '</ul>';
		table += '</td>';
		table += '</tr>';
		table += '<tr>';
		table += '<td colspan="3"><span class="resaltado">Moviles asociados: '+regla.MOVILES.length+'</span></td>';
		table += '</tr>';
		table += '<tr>';
		table += '<td colspan="3">';
		table += '<ul>';
		if(LOGIN.isBykom && regla.tipoCuenta == 2){
			table += '<li> <span class="inputLBL">Toda la flota</span> </li>';
		}else{
			for (i=0; i<regla.MOVILES.length; i++){
				movilTMP = misVehiculosHash.get(regla.MOVILES[i]);
				if ((movilTMP!=null)&&(movilTMP!='undefined')){
					table += '<li> <span class="inputLBL">'+movilTMP.label+'</span> </li>';
				}
			}
		}
		table += '</ul>';
		table += '</td>';
		table += '</table>';
		document.getElementById('genericDHTMLWindowDiv').innerHTML=table;
	}

	function openInfoRegla(id){
		var myRegla = misReglasHash.get(id.toString());
		printTableInfoRegla(myRegla);
		dhtmlwindow.open('infoWindow'+id, 'div', 'genericDHTMLWindowDiv', 'Log&iacute;stica: '+myRegla.nombre, 'width=360px,height=200px,left=200px,top=150px,resize=0,scrolling=1');
 		return false;
	}
	
	function mostrarCampos(me){
		$j("#franjaZonaPunto").show();
		$j("#franjaRuta").hide();
		$j("#botonesZonaPunto").show();
		$j("#botonesRuta").hide();
		$j("#botonNuevaFranja").show();
		$j("#botonNuevaFranjaEspecifica").hide();
		if(me.value==0){
			$j("#camposZona").show();
			$j("#camposPunto").hide();
			$j("#camposRuta").hide();
		}else if(me.value==1){
			$j("#camposPunto").show();
			$j("#camposZona").hide();
			$j("#camposRuta").hide();
		}else if(me.value==2){
			$j("#camposRuta").show();
			$j("#camposPunto").hide();
			$j("#camposZona").hide();
			$j("#franjaZonaPunto").hide();
			$j("#franjaRuta").show();
			$j("#botonesZonaPunto").hide();
			$j("#botonesRuta").show();
			$j("#botonNuevaFranja").hide();
			$j("#botonNuevaFranjaEspecifica").show();
		}
		if(LOGIN.isBykom){
			$j("#botonNuevaFranja").hide();
			$j("#botonNuevaFranjaEspecifica").hide();
			var mostrarFlota = false;
			if($j("#tipoRegla").val()==0){
				mostrarFlota = true;
			}
			addOptionsToCuentaReglasSelector(mostrarFlota);
		}
	}
